﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Bastanteo.Negocio;
using Bastanteo.Dominio;

namespace Bastanteo.Controllers
{
    public class RepresentanteController : Controller
    {

        IAdministracionService adminService = null;
        //
        // GET: /Representante/

        public ActionResult Index()
        {

            TempData["TipoDocumento"] = ListarTipos();
            TempData["Cliente"] = ListarClientes();
            TempData["Grupo"] = ListarGrupos();
            TempData["Cargo"] = ListarCargos();


            return View(adminService.ListarRepresentante());

        }

        public ActionResult Create()
        {

            TempData["TipoDocumento"] = ListarTipos();
            TempData["Cliente"] = ListarClientes();
            TempData["Grupo"] = ListarGrupos();
            TempData["Cargo"] = ListarCargos();

            return View();
        }

        // POST: /Representante/Create
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                string tipo = (String)collection["TipoDocumento"];
                string NumeroDocumento = (String)collection["NumeroDocumento"];
                string Apellidos = (String)collection["Apellidos"];
                string Nombres = (String)collection["Nombres"];
                Cliente cliente = adminService.ObtenerCliente(Int32.Parse(collection["Cliente"]));
                Grupo grupo = adminService.ObtenerGrupo(Int32.Parse(collection["Grupo"]));

                string cargo = (String)collection["Cargo"];

                Representante r = adminService.RegistrarRepresentante(cliente, tipo, NumeroDocumento, Nombres, Apellidos, grupo, cargo);
               
                     TempData["TipoDocumento"] = ListarTipos();
            TempData["Cliente"] = ListarClientes();
            TempData["Grupo"] = ListarGrupos();
            TempData["Cargo"] = ListarCargos();

                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
                    TempData["TipoDocumento"] = ListarTipos();
            TempData["Cliente"] = ListarClientes();
            TempData["Grupo"] = ListarGrupos();
            TempData["Cargo"] = ListarCargos();
                return View("Create");
            }
        }

        // GET: /Representante/Delete/5


        public ActionResult Delete(int id)
        {
            return View(adminService.ObtenerRepresentante(id));
        }

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
                Representante RepaEliminar = adminService.ObtenerRepresentante(id);
                adminService.EliminarRepresentante(RepaEliminar.CodigoRepresentante);
                TempData["mensaje"] = "Representante" + RepaEliminar.CodigoRepresentante + " eliminado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Representante/Edit/5

        public ActionResult Edit(int id)
        {
            TempData["TipoDocumento"] = ListarTipos();
            TempData["Cliente"] = ListarClientes();
            TempData["Grupo"] = ListarGrupos();
            TempData["Cargo"] = ListarCargos();


              return View(adminService.ObtenerRepresentante(id));
        }

        //
        // POST: /Representante/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                string tipo = (String)collection["TipoDocumento"];
                string NumeroDocumento = (String)collection["NumeroDocumento"];
                string Apellidos = (String)collection["Apellidos"];
                string Nombres = (String)collection["Nombres"];
                Cliente cliente = adminService.ObtenerCliente(Int32.Parse(collection["Cliente"]));
                Grupo grupo = adminService.ObtenerGrupo(Int32.Parse(collection["Grupo"]));

                string cargo = (String)collection["Cargo"];

                Representante r = adminService.ModificarRepresentante(adminService.ObtenerRepresentante(id).CodigoRepresentante,cliente, tipo, NumeroDocumento, Nombres, Apellidos, grupo, cargo);

                TempData["TipoDocumento"] = ListarTipos();
                TempData["Cliente"] = ListarClientes();
                TempData["Grupo"] = ListarGrupos();
                TempData["Cargo"] = ListarCargos();

                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
                TempData["TipoDocumento"] = ListarTipos();
                TempData["Cliente"] = ListarClientes();
                TempData["Grupo"] = ListarGrupos();
                TempData["Cargo"] = ListarCargos();
                return View("Edit");
            }
        }


        private ICollection<SelectListItem> ListarTipos()
        {
            ICollection<SelectListItem> tipos = new List<SelectListItem>();
            tipos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione.." });
            tipos.Add(new SelectListItem() { Value = "DNI", Text = "DNI" });
            tipos.Add(new SelectListItem() { Value = "PSP", Text = "PSP" });
            tipos.Add(new SelectListItem() { Value = "LME", Text = "LME" });
           

            return tipos;
        }

        private ICollection<SelectListItem> ListarClientes()
        {
            ICollection<SelectListItem> clientes = new List<SelectListItem>();
            clientes.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione.." });
            foreach (Cliente cli in adminService.ListarClientes())
                clientes.Add(new SelectListItem()
                {
                    Value = cli.CodigoCliente.ToString(),
                    Text = cli.RazonSocial
                });
            return clientes;
        }

        private ICollection<SelectListItem> ListarGrupos()
        {
            ICollection<SelectListItem> grupos = new List<SelectListItem>();
            grupos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione.." });
            foreach (Grupo gru in adminService.ListarGrupos())
                grupos.Add(new SelectListItem()
                {
                    Value = gru.CodigoGrupo.ToString(),
                    Text = gru.Descripcion
                });
            return grupos;
        }

        private ICollection<SelectListItem> ListarCargos()
        {
            ICollection<SelectListItem> cargos = new List<SelectListItem>();
            cargos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione.." });
            cargos.Add(new SelectListItem() { Value = "Asesor", Text = "Asesor" });
            cargos.Add(new SelectListItem() { Value = "Jefe de Marketing", Text = "Jefe de Marketing" });
            cargos.Add(new SelectListItem() { Value =  "Secretaria", Text = "Secretaria" });
            cargos.Add(new SelectListItem() { Value = "Gerente General", Text = "Gerente General" });
            cargos.Add(new SelectListItem() { Value = "Contador", Text = "Contador" });

                return cargos;
        }

    }
}
